Cette librairie, qui est disponible dans la section télécharger, sert avant tout à dessiner ce que l'on veut.
A la base nous avons des vertex. Ce sont les points que nous plaçons dans l'espace, on peut également les positionner dans 2 dimensions mais vous verrez ça vous même.
Il suffit de les encapsuler par leur methode de lien pour dessiner quelque chose.
Exemple, voilà comment on dessine un carré :
glBegin(GL_QUADS); | //début de l'objet, (méthode); | ||
glVertex3d(0,0,0); | //-> | ||
glVertex3d(1,0,0); | //position des points dans l'espace, | ||
glVertex3d(1,1,0); | //suivants les axes x, y, z; | ||
glVertex3d(0,1,0); | //<- | ||
glEnd(); | //fin de l'objet; |
Tous les objets que vous crérez suiveront ce principe. Il faut savoir aussi que la plupart des fonctions opengl ne peuvent pas être utilisées entre glBegin() et glEnd (il n'y a quasiment que glColor() qui fonctionne, mais on en reparlera plus tard).
Enfin il suffit de bien choisir la méthode de lien des vertex et on peut faire n'importe quoi.
Voilà la liste des méthodes existantes :
Méthodes_de_lien | Descriptions | schémas |
---|---|---|
GL_POINTS | Dessine un point pour chaque vertex transmis. | ![]() |
GL_LINES | Dessine des lignes. Le point n défini le début d'une ligne et le point n+1 la fin de la ligne. | ![]() |
GL_LINE_STRIP | Dessine un groupe de lignes connectées, formant une chaine partant du premier vertex et s'arrêtant au deriner. | ![]() |
GL_LINE_LOOP | Même chose que GL_LINE_STRIP, mais en revenant au premier vertex à la fin. | ![]() |
GL_TRIANGLES | Chaque triplet de vertex constitue un triangle | ![]() |
GL_TRIANGLE_STRIP | Un triangle est défini pour chaque vertex présenté après les deux premiers | ![]() |
GL_TRIANGLE_FAN | Même chose que GL_TRIANGLE_STRIP, sauf que le premier vertex de chaque triangle est toujours le n°1 | ![]() |
GL_QUADS | Chaque quadruplet de vertex définit un quadrilatère (composé de 2 triangles) | ![]() |
GL_QUAD_STRIP | Chaque couple de vertex présenté après la première paire définit un quadrilatère (attention à l'ordre des points) | ![]() |
GL_POLYGON | Dessine un polygone convexe | ![]() |
En générale, on utilise des carrés pour faire des objets complèxes. Dans certains cas on utilise des triangles pour obtenir une forme bien particulière. Mais c'est un peu compliqué pour le moment vous verrez ça dans la section cours/algorithmique/deformation d'un plan.
glu est le complément d'opengl, indispensable, il permet entre autre de créer des objets quadratiques(sphere, cylindre, disque plein ou partiel).
Il est capable également de créer des objets très complèxes grâce aux techniques nurbs et tesselation, mais étant un peu trop compliquées pour le moment, gardons notre attention sur les objets quadratiques.
Pour créer un tel objet, il faut suivre la procedure suivante:
/*--------- Global ---------------*/ | //A declarer en global ou tout mettre dans la meme fonction | |
GLUquadricObj *pObj; | //definition du pointeur d'objet | |
/*--------- INIT ---------------*/ | //En phase d'initialisation | |
pObj = gluNewQuadric(); | //creation d'un objet(Retourne 0 si No Memory) | |
gluQuadricNormals(pObj, GLU_SMOOTH); | //application des normals | |
/*--------- DrawScene ----------*/ | //Dans la fonction d'affichage | |
gluSphere (pObj, 10, 1024, 1024); | //par exemple | |
/*---------- FIN --------------*/ | //et a la fin du programme | |
gluDeleteQuadric (pObj); | //detruit l'objet |
instructions_glu | Descriptions | schémas |
---|---|---|
gluCylinder(pObj, baseRadius, topRadius, height, slices, stacks); | //dessine un cylindre | ![]() |
gluDisk (pObj, innerRadius, outerRadius, slices, loops); | //dessine un disk | ![]() |
gluPartialDisk (pObj, innerRadius, outerRadius, slices, loops, startAngle, sweepAngle); | //dessine un disque partiel | ![]() |
gluSphere (pObj, radius, slices, stacks); | //dessine une sphere | ![]() |
Glut est là pour nous simplifier la vie, elle nous crée très facilement l'environnement qu'a besoin opengl(je parle de la fenêtre graphique). Mais elle a quelques fonctions bien sympathiques, comme des objets 3D déjà tout fait, qui nous simplifie énormement la vie. Avec une ligne de code on peut faire direct un cube, une sphère, un cône etc.. Et bien sur tout ça rèste 100% portable.
instructions_glut | Descriptions | schémas |
---|---|---|
glutWireSphere(double radius, int slices, int stacks); glutSolidSphere(double radius, int slices, int stacks); | Dessine une sphère, en filaire(Wire) ou en plein(Solid). | ![]() |
glutSolidCone(double base, double height, int slices, int stacks); | Dessine un cône. | ![]() |
glutSolidCube(GLdouble size); | Dessine un un cube. | ![]() |
glutSolidTorus(dble innerRadius, dble outerRadius, int sides, int rings); | Dessine un beignet, hum g faim. | ![]() |
glutSolidDodecahedron(void); | Dessine un truc chelou, il n'a pas d'arguments ca taille est de 1. | ![]() |
glutSolidTeapot(GLdouble size); | A la c'est une tasse de cafe. Etrange? | ![]() |
glutSolidOctahedron(void); | Dessine un losange 3D. | ![]() |
glutSolidTetrahedron(void); | Dessine une pyramide à base triangulaire. | ![]() |
glutSolidIcosahedron(void); | Et ça c'est une 'boule' à fassette triangulaire. | ![]() |
Chacune de ces formes à deux fonctions, comme pour la sphère, il suffit de remplacer "Solid" par "Wire" dans le nom de la fonction utilisée et on se retrouve avec un objet filaire à la place d'un normal. Les objets ainsi créés apparaissent au centre de la matrice active. C'est pratique toutes ces petites fonctions, mais c'est super limitées. On les utilise quand il faut mettre des petites boules un peu partout, mais c'est pas avec ça qu'on va faire un personnage à la quake-like.
Retour |
contact: ultrafil [AT] fr.st |